Философия Естественный синтаксис утверждает, что пользовательские типы должны вести себя как первоклассные граждане. При реализации перегрузки операторов, мы позволяем классам использовать стандартную нотацию (например, + или ==), что снижает когнитивную нагрузку и соответствует принципу наименьшего удивления.
1. Анатомия и маршрутизация
Оператор — это функция с особым именем: ключевое слово оператор за которым следует символ. Унарный оператор имеет один операнд, а бинарный оператор — два. Когда определён как метод-член, то левый операнд привязывается к неявному указателю this (a.operator+(b)). Как ненадлежащий оператор — оба явно указаны (operator+(a, b)). метод-членлевый операнд привязывается к неявному указателю this (a.operator+(b)). Как ненадлежащий оператороба явно указаны (operator+(a, b))
2. Ограничения и этика
C++ предотвращает «вредительство в языке»: вы не можете создавать новые символы (например, **) или переопределять операции для встроенных типов (например, int + int). Приоритет и ассоциативность являются непреобразуемыми. Архитектурный принцип: классы, определяющие == безупречно интегрируются с алгоритмами библиотеки, такими как std::find.